From 99aa5b9d69b46c50992e61ab4dbf6e6b1946f606 Mon Sep 17 00:00:00 2001 From: "emellor@leeni.uk.xensource.com" Date: Sat, 11 Mar 2006 11:45:10 +0100 Subject: [PATCH] - Reworked to use your match_domid suggestion and filtering - Aligned output and help to fit within 80 char limit - User now deals in milliseconds instead of nanoseconds - Fixed some missing parens in tests (I had pushed stale versions) - Updated tests to deal with period/slice/latency in ms root@bebop:~/xm-test.sedf/tests/sedf # xm sched-sedf Name ID Period(ms) Slice(ms) Lat(ms) Extra Weight Domain-0 0 20.0 15.0 0.0 1 0 Signed-off-by: Ryan Harper --- tools/python/xen/xm/main.py | 99 +++++++++---------- .../tests/sedf/01_sedf_period_slice_pos.py | 8 +- .../tests/sedf/02_sedf_period_lower_neg.py | 5 +- .../tests/sedf/03_sedf_slice_lower_neg.py | 5 +- .../tests/sedf/04_sedf_slice_upper_neg.py | 5 +- .../tests/sedf/05_sedf_extratime_pos.py | 2 +- .../sedf/06_sedf_extratime_disable_neg.py | 3 + 7 files changed, 69 insertions(+), 58 deletions(-) diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index a2987d6514..b51b2ffb4f 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -84,10 +84,11 @@ sched_bvt_help = """sched-bvt Set Borrowed Virtual Time s sched_bvt_ctxallow_help = """sched-bvt-ctxallow Set the BVT scheduler context switch allowance""" sched_sedf_help = "sched-sedf [DOM] [OPTIONS] Show|Set simple EDF parameters\n" + \ -" -p, --period Relative deadline(ns).\n\ - -s, --slice Worst-case execution time(ns) (slice < period).\n\ - -l, --latency scaled period(ns) in case the domain is doing\n\ - heavy I/O.\n\ +" -p, --period Relative deadline(ms).\n\ + -s, --slice Worst-case execution time(ms)\n\ + (slice < period).\n\ + -l, --latency scaled period(ms) in case the domain\n\ + is doing heavy I/O.\n\ -e, --extra flag (0/1) which controls whether the\n\ domain can run in extra-time\n\ -w, --weight mutually exclusive with period/slice and\n\ @@ -641,26 +642,25 @@ def xm_sched_bvt_ctxallow(args): server.xend_node_cpu_bvt_slice_set(slice) def xm_sched_sedf(args): + def ns_to_ms(val): + return float(val) * 0.000001 + + def ms_to_ns(val): + return (float(val) / 0.000001) + def print_sedf(info): - print( ("%(name)-32s %(dom)3d %(period)12d %(slice)12d %(latency)12d" + - " %(extratime)10d %(weight)7d") % info) + info['period'] = ns_to_ms(info['period']) + info['slice'] = ns_to_ms(info['slice']) + info['latency'] = ns_to_ms(info['latency']) + print( ("%(name)-32s %(dom)3d %(period)9.1f %(slice)9.1f" + + " %(latency)7.1f %(extratime)6d %(weight)6d") % info) - # FIXME: this can probably go away if someone points me to the proper way. def domid_match(domid, info): - d = "" - f = "" - try: - d = int(domid) - f = 'dom' - except: - d = domid - f = 'name' + return domid is None or domid == info['name'] or domid == str(info['dom']) - return (d == info[f]) - # we want to just display current info if no parameters are passed if len(args) == 0: - domid = '-1' + domid = None else: # we expect at least a domain id (name or number) # and at most a domid up to 5 options with values @@ -677,13 +677,14 @@ def xm_sched_sedf(args): err(opterr) sys.exit(1) + # convert to nanoseconds if needed for (k, v) in options: if k in ['-p', '--period']: - opts['period'] = v + opts['period'] = ms_to_ns(v) elif k in ['-s', '--slice']: - opts['slice'] = v + opts['slice'] = ms_to_ns(v) elif k in ['-l', '--latency']: - opts['latency'] = v + opts['latency'] = ms_to_ns(v) elif k in ['-e', '--extratime']: opts['extratime'] = v elif k in ['-w', '--weight']: @@ -691,37 +692,35 @@ def xm_sched_sedf(args): # print header if we aren't setting any parameters if len(opts.keys()) == 0: - print '%-33s %-8s %-13s %-10s %-8s %-10s %-6s' %('Name','ID','Period', - 'Slice', 'Latency', - 'ExtraTime','Weight') + print '%-33s %-2s %-4s %-4s %-7s %-5s %-6s'%('Name','ID','Period(ms)', + 'Slice(ms)', 'Lat(ms)', + 'Extra','Weight') from xen.xend.XendClient import server - for dom in getDomains(""): - d = parse_doms_info(dom) - - if domid == '-1' or domid_match(domid, d): - - # fetch current values so as not to clobber them - sedf_info = \ - parse_sedf_info(server.xend_domain_cpu_sedf_get(d['dom'])) - sedf_info['name'] = d['name'] - - # update values in case of call to set - if len(opts.keys()) > 0: - for k in opts.keys(): - sedf_info[k]=opts[k] - - # send the update - v = map(int, [sedf_info['period'], sedf_info['slice'], - sedf_info['latency'], sedf_info['extratime'], - sedf_info['weight']]) - rv = server.xend_domain_cpu_sedf_set(d['dom'], *v) - if int(rv) != 0: - err("Failed to set sedf parameters (rv=%d)."%(rv)) - - # not setting values, display info - else: - print_sedf(sedf_info) + doms = filter(lambda x : domid_match(domid, x), + [parse_doms_info(dom) for dom in getDomains("")]) + for d in doms: + # fetch current values so as not to clobber them + sedf_info = \ + parse_sedf_info(server.xend_domain_cpu_sedf_get(d['dom'])) + sedf_info['name'] = d['name'] + + # update values in case of call to set + if len(opts.keys()) > 0: + for k in opts.keys(): + sedf_info[k]=opts[k] + + # send the update, converting user input + v = map(int, [sedf_info['period'], sedf_info['slice'], + sedf_info['latency'],sedf_info['extratime'], + sedf_info['weight']]) + rv = server.xend_domain_cpu_sedf_set(d['dom'], *v) + if int(rv) != 0: + err("Failed to set sedf parameters (rv=%d)."%(rv)) + + # not setting values, display info + else: + print_sedf(sedf_info) def xm_info(args): diff --git a/tools/xm-test/tests/sedf/01_sedf_period_slice_pos.py b/tools/xm-test/tests/sedf/01_sedf_period_slice_pos.py index 0c8a3eb519..6b6b95c97a 100644 --- a/tools/xm-test/tests/sedf/01_sedf_period_slice_pos.py +++ b/tools/xm-test/tests/sedf/01_sedf_period_slice_pos.py @@ -33,8 +33,8 @@ if status != 0: # NB: setting period requires non-zero slice # scale current period in half -period = str(int(p) / 2) -slice = str(int(p) / 4) +period = str(float(p) / 2) +slice = str(float(p) / 4) opts = "%s -p %s -s %s" %(domain.getName(), period, slice) (status, output) = traceCommand("xm sched-sedf %s" %(opts)) @@ -53,10 +53,10 @@ if s != 0: (name,domid,p1,s1,l1,e1,w1) = params if p1 != period: - FAIL("Failed to change domain period from %d to %d" %(p, period)) + FAIL("Failed to change domain period from %f to %f" %(p, period)) if s1 != slice: - FAIL("Failed to change domain slice from %d to %d" %(s, slice)) + FAIL("Failed to change domain slice from %f to %f" %(s, slice)) # Stop the domain (nice shutdown) domain.stop() diff --git a/tools/xm-test/tests/sedf/02_sedf_period_lower_neg.py b/tools/xm-test/tests/sedf/02_sedf_period_lower_neg.py index 8db2b2365f..91c0672243 100644 --- a/tools/xm-test/tests/sedf/02_sedf_period_lower_neg.py +++ b/tools/xm-test/tests/sedf/02_sedf_period_lower_neg.py @@ -28,7 +28,7 @@ period = "-1" # NB: setting period requires non-zero slice # scale current period in half -slice = "1" +slice = "5" opts = "%s -p %s -s %s" %(domain.getName(), period, slice) (status, output) = traceCommand("xm sched-sedf %s" %(opts)) @@ -39,3 +39,6 @@ eyecatcher = "Failed to set sedf parameters" # check for failure if output.find(eyecatcher) >= 0: FAIL("sched-sedf let me set bogus period (%s)" %(period)) + +# Stop the domain (nice shutdown) +domain.stop() diff --git a/tools/xm-test/tests/sedf/03_sedf_slice_lower_neg.py b/tools/xm-test/tests/sedf/03_sedf_slice_lower_neg.py index dce9207644..613a46a7b8 100644 --- a/tools/xm-test/tests/sedf/03_sedf_slice_lower_neg.py +++ b/tools/xm-test/tests/sedf/03_sedf_slice_lower_neg.py @@ -34,4 +34,7 @@ eyecatcher = "Failed to set sedf parameters" # check for failure if output.find(eyecatcher) >= 0: - FAIL("sched-sedf let me set bogus slice (%s)" %(slice) + FAIL("sched-sedf let me set bogus slice (%s)" %(slice)) + +# Stop the domain (nice shutdown) +domain.stop() diff --git a/tools/xm-test/tests/sedf/04_sedf_slice_upper_neg.py b/tools/xm-test/tests/sedf/04_sedf_slice_upper_neg.py index 42c0aa584f..8144021a1d 100644 --- a/tools/xm-test/tests/sedf/04_sedf_slice_upper_neg.py +++ b/tools/xm-test/tests/sedf/04_sedf_slice_upper_neg.py @@ -32,7 +32,7 @@ if status != 0: (name, domid, p, s, l, e, w) = params # set slice > than current period -slice = str(int(p)+1) +slice = str(float(p)+1) opts = "%s -s %s" %(domain.getName(), slice) (status, output) = traceCommand("xm sched-sedf %s" %(opts)) @@ -43,3 +43,6 @@ eyecatcher = "Failed to set sedf parameters" # check for failure if output.find(eyecatcher) >= 0: FAIL("sched-sedf let me set a slice bigger than my period.") + +# Stop the domain (nice shutdown) +domain.stop() diff --git a/tools/xm-test/tests/sedf/05_sedf_extratime_pos.py b/tools/xm-test/tests/sedf/05_sedf_extratime_pos.py index 3b26dd76a9..4ca28075ea 100644 --- a/tools/xm-test/tests/sedf/05_sedf_extratime_pos.py +++ b/tools/xm-test/tests/sedf/05_sedf_extratime_pos.py @@ -38,7 +38,7 @@ direction = "disable" # NB: when disabling extratime(=0), must pass in a slice opts = "%s -e %s" %(domain.getName(), extratime) if extratime == "0": - opts += " -s %s" %( str( (int(p)/2)+1 ) ) + opts += " -s %s" %( str( (float(p)/2)+1 ) ) direction = "enable" (status, output) = traceCommand("xm sched-sedf %s" %(opts)) diff --git a/tools/xm-test/tests/sedf/06_sedf_extratime_disable_neg.py b/tools/xm-test/tests/sedf/06_sedf_extratime_disable_neg.py index 14bfd378c3..202389fe1b 100644 --- a/tools/xm-test/tests/sedf/06_sedf_extratime_disable_neg.py +++ b/tools/xm-test/tests/sedf/06_sedf_extratime_disable_neg.py @@ -66,3 +66,6 @@ eyecatcher = "Failed to set sedf parameters" # check for failure if output.find(eyecatcher) >= 0: FAIL("sched-sedf let me disable extratime without a non-zero slice") + +# Stop the domain (nice shutdown) +domain.stop() -- 2.30.2